//  每个异步代码块封装成函数
function asyncFun1(callBack) {
    setTimeout(() => {

        callBack('异步执行1')

    }, 3000);
}

function asyncFun2(callBack, str) {
    setTimeout(() => {

        callBack('异步执行2' + str)

    }, 2000);
}

function asyncFun3(callBack, str) {
    setTimeout(() => {

        callBack('异步执行3' + str)

    }, 1000);
}

asyncFun1((asyncFun1Res) => {
    console.log(asyncFun1Res);

    asyncFun2((asyncFun2Res) => {
        console.log(asyncFun2Res);

        asyncFun3((asyncFun3Res) => {
            console.log(asyncFun3Res);

        }, asyncFun2Res)
    }, asyncFun1Res)
})